#include "process.h"
#include <string.h>
#include <unistd.h>

#define SIZE 101
#define STYLE '='

// ANSI颜色控制码宏定义
#define RESET       "\033[0m"      // 重置所有属性
#define BLACK       "\033[30m"     // 黑色文本
#define RED         "\033[31m"     // 红色文本
#define GREEN       "\033[32m"     // 绿色文本
#define YELLOW      "\033[33m"     // 黄色文本
#define BLUE        "\033[34m"     // 蓝色文本
#define MAGENTA     "\033[35m"     // 洋红色文本
#define CYAN        "\033[36m"     // 青色文本
#define WHITE       "\033[37m"     // 白色文本

// 带背景色的文本
#define BGBLACK     "\033[40m"     // 黑色背景
#define BGRED       "\033[41m"     // 红色背景
#define BGGREEN     "\033[42m"     // 绿色背景
#define BGYELLOW    "\033[43m"     // 黄色背景
#define BGBLUE      "\033[44m"     // 蓝色背景
#define BGMAGENTA   "\033[45m"     // 洋红色背景
#define BGCYAN      "\033[46m"     // 青色背景
#define BGWHITE     "\033[47m"     // 白色背景

//version2
void  FlushProcess(double total, double curr) // 更新进度，按照下载进度，进行更新进度条
{
    if(curr > total)
        curr = total;
    double rate = curr / total * 100.0;
    int cnt = (int)rate;
    char processbuff[SIZE];
    memset(processbuff, '\0', sizeof(processbuff));
    int i = 0;
    for(; i < cnt; ++i)
        processbuff[i] = '=';

    static const char* lable = "|/-\\";
    static int index = 0;
    // 刷新
    //printf("[%-100s][%.1lf][%c]\r", processbuff, rate, lable[index++]);
    // 彩色进度条
    printf(BGGREEN RED "[%-100s]" RESET MAGENTA"[%.1lf]" RESET YELLOW"[%c]" RESET"\r", processbuff, rate, lable[index++]);
    index %= strlen(lable);
    fflush(stdout);
    if(curr >= total)
        printf("\n");
}

//version1：能够使用吗？？
//只能说明原理
void Process()
{
    const char* lable = "|/-\\";
    int len = strlen(lable);
    char processbuff[SIZE];
    memset(processbuff, '\0', sizeof(processbuff));
    int cnt = 0;
    while(cnt <= 100)
    {
        printf("[%-100s] [%d%%][%c]\r", processbuff, cnt, lable[cnt % len]);
        fflush(stdout);
        processbuff[cnt++] = STYLE; 
        usleep(30000);
    }
    printf("\n");
}
